function arrive()
% Funcion:   arrive
% Proposito: Funcion de los eventos de arribos
%
%
global Q_LIMIT;
global BUSY;
global IDLE;

global next_event_type;
global num_custs_delayed;
global time_limit;
global num_events;
global num_in_q;
global server_status;

global area_num_in_q;
global area_server_status;
global total_time_in_system;
global mean_arrival_1;
global service_1_params;
global service_2_params;
global time;
global time_arrival;
global time_last_event;
global time_next_event;
global total_of_delays;

global outfile;

%esta funcion la llamo en el caso de la realimentacion.
%en ese caso, no hay que tocar el programa de arrivos
if next_event_type ~= 3
    % Programa el proximo arrivo
    time_next_event(1) = time + expon(mean_arrival_1);
end

global countE;
global countR;

countE = countE + 1;
if next_event_type == 3
    countR = countR + 1;
end

% Chequea si el servidor 1 esta ocupado 
if ( server_status{1} == BUSY )
	% Si el servidor 1 esta ocupado: incrementa el numero de
	% clientes en la cola 1.
	 num_in_q{1} = num_in_q{1} + 1;

	 % Chequea si no se excede la cantidad de clientes en cola
	 if ( num_in_q{1} > Q_LIMIT )
	 	% La cola alcanzo su limite, entonces para la simulacion
	 	fprintf(outfile, '\nOverflow de la cola 1 a los %f minutos', time);
		return;
	end
	% Hay lugar en la cola, entonces almacena el tiempo de llegada del
	% cliente en arribo en el nuevo tiempo de arribo
    time_arrival{1}(num_in_q{1}) = time;
else
	% El servidor 1 esta libre, entonces el cliente en arribo tiene un
	% delay igual a cero.
	delay            = 0.0;
	total_of_delays{1} = total_of_delays{1} + delay;

	% Incrementa el numero de clientes atendidos y pone el estatus
	% del servidor ocupado.
	num_custs_delayed{1} = num_custs_delayed{1} + 1;
	server_status{1} = BUSY;
	
	% Programa una partida de servicio 1 a cola 2(servicio completado)
	time_next_event(2) = time + uniform(service_1_params(1), service_1_params(2));
    
    %calculo tiempo total de cliente en sistema
    total_time_in_system = total_time_in_system + time_next_event(2) - time;
end
return;